Advertisement
Guest User

Untitled

a guest
Dec 25th, 2017
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.16 KB | None | 0 0
  1.  
  2. // inline asm code used to generate the output.
  3. void static inline Signal_OUT(const uint8_t *signal, uint8_t ad2, uint8_t ad1, uint8_t ad0)
  4. {
  5.     asm volatile(
  6.         "eor r18, r18"                  // Clear R18 register.                                          Instruction takes 1 cycles.
  7.         "eor r19, r19"                  // Clear R19 register.                                          Instruction takes 1 cycles.
  8.         "1:"                            // Set Label 1:
  9.         "add r18, %0"                   // means add (ad0) variable to r18.                             Instruction takes 1 cycles.
  10.         "adc r19, %1"                   // means adc (ad1) variable to r19.                             Instruction takes 1 cycles.
  11.         "adc %A3, %2"                   // means adc (ad2) variable to r30, %A3 means r30,              Instruction takes 1 cycles.
  12.         "lpm"                           // Load program Memory to r0 from Z pointed location of Flash,  Instruction takes 3 cycles.
  13.         "out %4, __tmp_reg__"           // Out writes from temp(r0) to PortA                            Instruction takes 1 cycles.
  14.         "sbis %5, 2"                    // Skip if bit in I/O register is set.                          Instruction takes 1/2/3 cycles.
  15.         "rjmp 1b"                       // relative jump to lable 1                                     Instruction takes 2 cycles.
  16.         :
  17.         :"r" (ad0),"r" (ad1),"r" (ad2),"e" (signal),"I" (_SFR_IO_ADDR(PORTA)), "I" (_SFR_IO_ADDR(SPCR))
  18.         :"r18", "r19"
  19.     );
  20. }
  21.  
  22.  
  23. // this is the sinus table used.
  24. const uint8_t  sinewave[] __attribute__ ((section (".MySection1"))) = {
  25.     0x80,0x83,0x86,0x89,0x8c,0x8f,0x92,0x95,0x98,0x9c,0x9f,0xa2,0xa5,0xa8,0xab,0xae,
  26.     0xb0,0xb3,0xb6,0xb9,0xbc,0xbf,0xc1,0xc4,0xc7,0xc9,0xcc,0xce,0xd1,0xd3,0xd5,0xd8,
  27.     0xda,0xdc,0xde,0xe0,0xe2,0xe4,0xe6,0xe8,0xea,0xec,0xed,0xef,0xf0,0xf2,0xf3,0xf5,
  28.     0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfc,0xfd,0xfe,0xfe,0xff,0xff,0xff,0xff,0xff,
  29.     0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfe,0xfd,0xfc,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,
  30.     0xf6,0xf5,0xf3,0xf2,0xf0,0xef,0xed,0xec,0xea,0xe8,0xe6,0xe4,0xe2,0xe0,0xde,0xdc,
  31.     0xda,0xd8,0xd5,0xd3,0xd1,0xce,0xcc,0xc9,0xc7,0xc4,0xc1,0xbf,0xbc,0xb9,0xb6,0xb3,
  32.     0xb0,0xae,0xab,0xa8,0xa5,0xa2,0x9f,0x9c,0x98,0x95,0x92,0x8f,0x8c,0x89,0x86,0x83,
  33.     0x80,0x7c,0x79,0x76,0x73,0x70,0x6d,0x6a,0x67,0x63,0x60,0x5d,0x5a,0x57,0x54,0x51,
  34.     0x4f,0x4c,0x49,0x46,0x43,0x40,0x3e,0x3b,0x38,0x36,0x33,0x31,0x2e,0x2c,0x2a,0x27,
  35.     0x25,0x23,0x21,0x1f,0x1d,0x1b,0x19,0x17,0x15,0x13,0x12,0x10,0x0f,0x0d,0x0c,0x0a,
  36.     0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x03,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,
  37.     0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x05,0x06,0x07,0x08,
  38.     0x09,0x0a,0x0c,0x0d,0x0f,0x10,0x12,0x13,0x15,0x17,0x19,0x1b,0x1d,0x1f,0x21,0x23,
  39.     0x25,0x27,0x2a,0x2c,0x2e,0x31,0x33,0x36,0x38,0x3b,0x3e,0x40,0x43,0x46,0x49,0x4c,
  40.     0x4f,0x51,0x54,0x57,0x5a,0x5d,0x60,0x63,0x67,0x6a,0x6d,0x70,0x73,0x76,0x79,0x7c
  41. };
  42.  
  43.  
  44. //array of pointers to signal tables
  45. const uint8_t *SIGNALS[] = {
  46.     sinewave,
  47.     ...
  48. };
  49.    
  50.  
  51. // the call to the inline function
  52. Signal_OUT( SIGNALS[0], foo >> 16, foo >> 8, foo);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement